﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Biuro.Klasy;
using System.Collections;

namespace Biuro.Formy
{
    public delegate void DodawanieKurortu();
    public delegate void DodawanieTransportu();
    public partial class AddEditHotel : Form
    {
        ArrayList kurorty;

        public ArrayList Kurorty
        {
            get { return kurorty; }
            set 
            { 
                kurorty = value;
                cbKurort.DataSource = null;
                cbKurort.DisplayMember = "Nazwa";
                cbKurort.ValueMember = "Liczba";
                cbKurort.DataSource = kurorty;
            }
        }
        ArrayList transporty;

        public ArrayList Transporty
        {
            get { return kurorty; }
            set
            {
                transporty = value;
                cbTransport.DataSource = null;
                cbTransport.DisplayMember = "Nazwa";
                cbTransport.ValueMember = "Liczba";
                cbTransport.DataSource = transporty;
            }
        }
        public event DodawanieKurortu DodajKurort;
        public event DodawanieTransportu DodajTransport;
        List<wyzywienie> wyzywienie;

        public List<wyzywienie> Wyzywienie
        {
            get { return wyzywienie; }
            set { wyzywienie = value; }
        }
        public string Nazwa
        {
            get { return tbNazwa.Text; }
            set { tbNazwa.Text = value; }
        }
        public string Miejscowsc
        {
            get { return tbMiejscowosc.Text; }
            set { tbMiejscowosc.Text = value; }
        }
        public int Standard
        {
            get { return (int)nmStandard.Value; }
            set { nmStandard.Value = (int)value; }
        }
        public int KurortID
        {
            get { return Int32.Parse(cbKurort.SelectedValue.ToString()); }
            set { cbKurort.SelectedValue = (object)value; }
        }
        public int TransportID
        {
            get { return Int32.Parse(cbTransport.SelectedValue.ToString()); }
            set { cbTransport.SelectedValue = value; }
        }
        public string Opis
        {
            get { return tbOpis.Text; }
            set { tbOpis.Text = value; }
        }
        public AddEditHotel()
        {
            InitializeComponent();
        }

        private void AddEditHotel_Load(object sender, EventArgs e)
        {
            Reset();
            wyzywienie = new List<wyzywienie>();
            cbKurort.DataSource = null;
            cbKurort.DisplayMember = "Nazwa";
            cbKurort.ValueMember = "Liczba";
            cbKurort.DataSource = kurorty;
            cbTransport.DataSource = null;
            cbTransport.DisplayMember = "Nazwa";
            cbTransport.ValueMember = "Liczba";
            cbTransport.DataSource = transporty;
        }

        private void lbDodaj_Click(object sender, EventArgs e)
        {
            try
            {
                wyzywienie.Add(new wyzywienie(tbWyzNazwa.Text, (int)nmIlosc.Value, Double.Parse(tbWyzCena.Text)));
                dgwWyzywienie.DataSource = null;
                dgwWyzywienie.DataSource = wyzywienie;
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
            finally
            {
                tbWyzCena.Text = "";
                tbWyzNazwa.Text = "";
                nmIlosc.Value = 1;
            }
        }

        private void lbUsun_Click(object sender, EventArgs e)
        {
            try
            {
                foreach (DataGridViewRow row in dgwWyzywienie.Rows)
                {
                    if (row.IsNewRow) continue;
                    if (row.Selected)
                    {
                        foreach (wyzywienie tmp in wyzywienie)
                            if ((tmp.Nazwa == row.Cells[0].Value.ToString()))
                            {
                                wyzywienie.Remove(tmp);
                            }
                    }
                }

            }
            catch (Exception exp)
            {
                //MessageBox.Show(exp.Message);
            }
            finally
            {
                dgwWyzywienie.DataSource = null;
                dgwWyzywienie.DataSource = wyzywienie;
            }
        }
        //to ma być puste bo inaczej sypie wyjątkami
        private void dgwWyzywienie_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }

        private void lbDodajKurort_Click(object sender, EventArgs e)
        {
            if (DodajKurort != null)
                DodajKurort();
        }

        private void btDodaj_Click(object sender, EventArgs e)
        {
            bool bledy = false;
            if (!System.Text.RegularExpressions.Regex.IsMatch(tbNazwa.Text.ToLower(), @"\b\p{L}{2,25}\b"))
            {
                tbNazwa.BackColor = Color.Red;
                bledy = true;
            }
            else
            {
                tbNazwa.BackColor = Color.White;
            }
            if (!System.Text.RegularExpressions.Regex.IsMatch(tbMiejscowosc.Text.ToLower(), @"\b\p{L}{2,25}\b"))
            {
                tbMiejscowosc.BackColor = Color.Red;
                bledy = true;
            }
            else
            {
                tbMiejscowosc.BackColor = Color.White;
            }
            if (wyzywienie.Count < 1)
            {
                MessageBox.Show("Nie dodałeś wyżywienia." + Environment.NewLine + "Aby dodać hotel należy dodać przynajmniej 1 typ wyzywienia");
                bledy = true;
            }

            if(bledy == false)
                this.DialogResult = DialogResult.OK;
        }
        public void Reset()
        {
            foreach (TextBox t in this.Controls.OfType<TextBox>().ToArray())
                t.Text = "";
        }

        private void lbDodajTransport_Click(object sender, EventArgs e)
        {
            if (DodajTransport != null)
                DodajTransport();
        }

        private void AddEditHotel_Paint(object sender, PaintEventArgs e)
        {
            System.Drawing.Drawing2D.LinearGradientBrush basebackground;
            basebackground = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 0), new Point(0, ClientSize.Height), Color.White, Color.LightGray);
            e.Graphics.FillRectangle(basebackground, ClientRectangle);
        }

    }
}
